﻿using System;
using System.Drawing;
using System.Windows.Forms;
using FTools.Dominio;
using FTools.Interface;
using FTools.Comunicacion;
using System.Collections;
using FTools.Generico;

namespace FTools.Presentacion
{
    public partial class FrmProducto : Form
    {
        InterfaceProducto interfaceProducto = new ComProducto();
        InterfaceSubProducto interfaceSubProducto = new ComSubProducto();
        InterfaceFabricante interfaceFabricante = new ComFabricante();
        InterfaceSpStock interfaceSpStock = new ComSpStock();
        
        /** INICIO FORMULARIO **/
        public FrmProducto()
        {
            InitializeComponent();
        }

        /** CARGA FORMULARIO **/
        private void FrmProductos_Load(object sender, EventArgs e)
        {
            tabControlProductos.SelectedIndexChanged += new EventHandler(tabControlProductos_SelectedIndexChanged);
            //this.cargarLvwProducto(interfaceProducto.obtenerColeccionProducto(), "P");
        }


/* ################################################################################################################################ */

#region Botones

        //BOTON GRABAR PROD/SUB-PROD
        private void btnGrabar_Click(object sender, EventArgs e)
        {
            this.errorProvider1.Clear();
            //try
            //{
            if (tabControlProductos.SelectedIndex == 0)//PRODUCTO
            {
                if (this.controlProducto(tabControlProductos.SelectedIndex))
                {
                    Producto objProducto = new Producto();
                    objProducto.Codigo = txtProdCodigo.Text;
                    objProducto.Nombre = txtProdNombre.Text;
                    objProducto.Descripcion = txtProdDescripcion.Text;
                    objProducto.Tipo = "";
                    interfaceProducto.altaProducto(objProducto);
                    FuncionesGenericas.limpiarTextForm(this);
                    this.limpiarLvwProducto();
                }
            }
            else if (tabControlProductos.SelectedIndex == 1)//SUBPRODUCTO
            {
                if (this.controlProducto(tabControlProductos.SelectedIndex))
                {
                    SubProducto objSubProducto = new SubProducto();

                    objSubProducto.Codigo = txtSubProdCodigo.Text;
                    objSubProducto.CodigoInterno = txtSubProdCodigoInt.Text;
                    objSubProducto.CodigoProveedor = txtSubProdCodigoProv.Text;
                    objSubProducto.Nombre = txtSubProdNombre.Text;
                    objSubProducto.Descripcion = txtSubProdDescripcion.Text;
                    objSubProducto.Unidad = Convert.ToDouble(txtSubProdUnidad.Text);
                    foreach (ListViewItem x in lvwProductoSel.SelectedItems)
                    {
                        Producto objProducto = (Producto)x.Tag;
                        objSubProducto.ObjProducto = objProducto;
                    }
                    foreach (ListViewItem x in lvwFabricante.SelectedItems)
                    {
                        Fabricante objFabricante = (Fabricante)x.Tag;
                        objSubProducto.ObjFabricante = objFabricante;
                    }

                    interfaceSubProducto.altaSubProducto(objSubProducto);
                    FuncionesGenericas.limpiarTextForm(this);
                    this.limpiarLvwProducto();
                }
            }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

        //BOTON BORRAR PROD/SUB-PROD
        private void btnBorrar_Click(object sender, EventArgs e)
        {
            if (tabControlProductos.SelectedIndex == 0 && txtId.Text != "")//PRODUCTO
            {
                if (lvwProducto.SelectedItems.Count > 0)
                {
                    foreach (ListViewItem x in lvwProductoSel.SelectedItems)
                    {
                        Producto objProducto = (Producto)x.Tag;
                        if (objProducto != null && interfaceProducto.existeProducto(objProducto.IdProducto))
                        {
                            interfaceProducto.bajaProducto(objProducto);
                            this.cambioBotones('A');
                            FuncionesGenericas.limpiarTextForm(this);
                            this.limpiarLvwProducto();
                        }
                        else
                            MessageBox.Show("#Error Interno: No existe Producto o no fue seleccionado", "Producto", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
            else if (tabControlProductos.SelectedIndex == 1)//SUBPRODUCTO
            {
                if (lvwProducto.SelectedItems.Count > 0)
                {
                    foreach (ListViewItem x in lvwProductoSel.SelectedItems)
                    {
                        SubProducto objSubProducto = (SubProducto)x.Tag;
                        if (objSubProducto != null && interfaceSubProducto.existeSubProducto(objSubProducto.IdSubProducto))
                        {
                            interfaceSubProducto.bajaSubProducto(objSubProducto);
                            this.cambioBotones('A');
                            FuncionesGenericas.limpiarTextForm(this);
                            this.limpiarLvwProducto();
                        }
                        else
                            MessageBox.Show("#Error Interno: No existe SubProducto o no fue seleccionado", "SubProducto", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }

        //BOTON MODIFICAR PROD/SUB-PROD/STOCK
        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (tabControlProductos.SelectedIndex == 0)//PRODUCTO
            {
                foreach (ListViewItem x in lvwProducto.SelectedItems)
                {
                    if (x.Tag != null)
                    {
                        Producto objProducto = (Producto)x.Tag;
                        if (objProducto != null && interfaceProducto.existeProducto(objProducto.IdProducto) && this.controlProducto(tabControlProductos.SelectedIndex))
                        {
                            objProducto.Codigo = txtProdCodigo.Text;
                            objProducto.Nombre = txtProdNombre.Text;
                            objProducto.Descripcion = txtProdDescripcion.Text;
                            objProducto.Tipo = "";
                            interfaceProducto.modificaProducto(objProducto);
                            this.cambioBotones('A');
                            FuncionesGenericas.limpiarTextForm(this);
                            FuncionesGenericas.limpiarComboForm(this);
                            FuncionesGenericas.limpiarDtpForm(this);
                            this.limpiarLvwProducto();
                            MessageBox.Show("Modificacion de Producto correcta.", "Producto", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                            MessageBox.Show("#Error Interno: No existe Producto o no fue seleccionado", "Producto", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
            else if (tabControlProductos.SelectedIndex == 1)//SUBPRODUCTO
            {
                foreach (ListViewItem x in lvwProducto.SelectedItems)
                {
                    if (x.Tag != null)
                    {
                        SubProducto objSubProducto = (SubProducto)x.Tag;
                        if (objSubProducto != null && interfaceSubProducto.existeSubProducto(objSubProducto.IdSubProducto) && this.controlProducto(tabControlProductos.SelectedIndex))
                        {
                            objSubProducto.Codigo = txtSubProdCodigo.Text;
                            objSubProducto.CodigoInterno = txtSubProdCodigoInt.Text;
                            objSubProducto.CodigoProveedor = txtSubProdCodigoProv.Text;
                            objSubProducto.Nombre = txtSubProdNombre.Text;
                            objSubProducto.Descripcion = txtSubProdDescripcion.Text;
                            objSubProducto.Unidad = Convert.ToDouble(txtSubProdUnidad.Text);
                            
                            foreach (ListViewItem xProd in lvwProductoSel.SelectedItems)
                            {
                                Producto objProducto = (Producto)xProd.Tag;
                                objSubProducto.ObjProducto = objProducto;
                            }
                            foreach (ListViewItem xFab in lvwFabricante.SelectedItems)
                            {
                                Fabricante objFabricante = (Fabricante)xFab.Tag;
                                objSubProducto.ObjFabricante = objFabricante;
                            }
                            interfaceSubProducto.modificaSubProducto(objSubProducto);
                            this.cambioBotones('A');
                            FuncionesGenericas.limpiarTextForm(this);
                            FuncionesGenericas.limpiarComboForm(this);
                            FuncionesGenericas.limpiarDtpForm(this);
                            this.limpiarLvwProducto();
                            MessageBox.Show("Modificacion de SubProducto correcta.", "SubProducto", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                            MessageBox.Show("#Error Interno: No existe SubProducto o no fue seleccionado", "SubProducto", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
            else if (tabControlProductos.SelectedIndex == 2)//STOCK
            {
                foreach (ListViewItem x in lvwProducto.SelectedItems)
                {
                    if (x.Tag != null)
                    {
                        SubProducto objSubProducto = (SubProducto)x.Tag;
                        if (interfaceSpStock.existeSpStock(objSubProducto.IdSubProducto))
                        {
                            SpStock objSpStock = interfaceSpStock.obtenerSpStock(objSubProducto.IdSubProducto);
                            objSpStock.StockMin = Convert.ToDouble(txtStockMin.Text);
                            objSpStock.Stock = Convert.ToDouble(txtStock.Text);
                            interfaceSpStock.modificaSpStock(objSpStock);
                            FuncionesGenericas.limpiarTextForm(this);
                            this.limpiarLvwProducto();
                            MessageBox.Show("Modificacion de Stock correcta.", "SpStock", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    else
                        MessageBox.Show("#Error Interno: No existe SubProducto o no fue seleccionado", "SpStock", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }

        //BOTON BUSCAR PROD/SUB-PROD
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            this.errorProvider1.Clear();
            if (tabControlProductos.SelectedIndex == 0)//PRODUCTO
            {
                //if (txtProdCodigo.Text != "" || txtProdNombre.Text != "" || txtProdDescripcion.Text != "")
                //{
                ArrayList colProducto = interfaceProducto.obtenerBusquedaProducto(txtProdCodigo.Text, txtProdNombre.Text, txtProdDescripcion.Text);
                this.cargarLvwProducto(colProducto, "P");
                //}
                //else
                //    MessageBox.Show("Debe ingresar filtro de busqueda");
            }
            else if (tabControlProductos.SelectedIndex == 1)//SUBPRODUCTO 
            {
                //if (txtProdCodigo.Text != "" || txtProdNombre.Text != "" || txtProdDescripcion.Text != "")
                //{
                double unidad = 0;
                long idProducto = 0;
                long idFabricante = 0;
                if (txtSubProdUnidad.Text != "")
                {
                    unidad = Convert.ToDouble(txtSubProdUnidad.Text);
                }
                if (lvwProductoSel.SelectedItems.Count > 0)
                {
                    foreach (ListViewItem x in lvwProductoSel.SelectedItems)
                    {
                        Producto objProducto = (Producto)x.Tag;
                        idProducto = objProducto.IdProducto;
                    }
                }
                if (lvwFabricante.SelectedItems.Count > 0)
                {
                    foreach (ListViewItem x in lvwFabricante.SelectedItems)
                    {
                        Fabricante objFabricante = (Fabricante)x.Tag;
                        idFabricante = objFabricante.IdFabricante;
                    }
                }
                ArrayList colSubProducto = interfaceSubProducto.obtenerBusquedaSubProducto(txtSubProdCodigo.Text, txtSubProdCodigoInt.Text, txtSubProdCodigoProv.Text, txtSubProdNombre.Text, txtSubProdDescripcion.Text, unidad, idProducto, idFabricante);
                this.cargarLvwProducto(colSubProducto, "S");
                //}
                //else
                //    MessageBox.Show("Debe ingresar filtro de busqueda");
                
            }
            else if (tabControlProductos.SelectedIndex == 2)//STOCK
            {
                ArrayList colSubProducto = interfaceSubProducto.obtenerBusquedaSubProducto(txtStockCodigo.Text, txtStockCodigoInt.Text, txtStockCodigoProv.Text, txtStockNombre.Text, txtStockDescripcion.Text, 0, 0, 0);
                this.cargarLvwProducto(colSubProducto, "St");
            }
        }

#endregion

/* ################################################################################################################################ */

#region Metodos

        //CONTROL INGRESO PRODUCTO/SUBPRODUCTO
        public Boolean controlProducto(int xTab)
        {
            if (xTab == 0)//PROD
            {
                if (txtProdCodigo.Text != "" && txtProdNombre.Text != "")
                {
                    return true;
                }
                else if (txtProdCodigo.Text == "")
                {
                    this.errorProvider1.SetError(txtProdCodigo, "Debe ingresar Codigo");
                    txtProdCodigo.Focus();
                }
                else if (txtProdNombre.Text == "")
                {
                    this.errorProvider1.SetError(txtProdNombre, "Debe ingresar Nombre");
                    txtProdNombre.Focus();
                }
                return false;
            }
            else if (xTab == 1)//SUBPROD
            {
                if (txtSubProdCodigoInt.Text != "" && txtSubProdNombre.Text != "" && lvwProductoSel.SelectedItems.Count > 0 && lvwFabricante.SelectedItems.Count > 0 && txtSubProdUnidad.Text != "")
                {
                    return true;
                }
                else if (txtSubProdCodigoInt.Text == "")
                {
                    this.errorProvider1.SetError(txtSubProdCodigoInt, "Debe ingresar Codigo Interno");
                    txtProdNombre.Focus();
                }
                else if (txtSubProdUnidad.Text == "")
                {
                    this.errorProvider1.SetError(txtSubProdUnidad, "Debe ingresar Unidad");
                    txtProdNombre.Focus();
                }
                else if (txtStockMin.Text == "")
                {
                    this.errorProvider1.SetError(txtStockMin, "Debe ingresar Stock Minimo");
                    txtStockMin.Focus();
                }
                else if (txtSubProdNombre.Text == "")
                {
                    this.errorProvider1.SetError(txtSubProdNombre, "Debe ingresar Nombre");
                    txtProdNombre.Focus();
                }
                else if (lvwProductoSel.SelectedItems.Count == 0)
                {
                    this.errorProvider1.SetError(lvwProductoSel, "Debe seleccionar Producto");
                    this.errorProvider1.SetIconAlignment(lvwProductoSel, ErrorIconAlignment.TopRight);
                }
                else if (lvwFabricante.SelectedItems.Count == 0)
                {
                    this.errorProvider1.SetError(lvwFabricante, "Debe seleccionar Fabricante");
                    this.errorProvider1.SetIconAlignment(lvwFabricante, ErrorIconAlignment.TopRight);
                }
            }
            else if (xTab == 2)//STOCK
            {
                if (lvwProducto.SelectedItems.Count > 0 && txtStockMin.Text != "" && txtStock.Text != "")
                {
                    return true;
                }
                else if (lvwProducto.SelectedItems.Count == 0)
                {
                    this.errorProvider1.SetError(lvwFabricante, "Debe seleccionar SubProducto");
                    this.errorProvider1.SetIconAlignment(lvwProducto, ErrorIconAlignment.TopRight);
                }
                else if (txtStockMin.Text == "")
                {
                    this.errorProvider1.SetError(txtStockMin, "Debe ingresar Stock Minimo");
                    txtStockMin.Focus();
                }
                else if (txtStock.Text == "")
                {
                    this.errorProvider1.SetError(txtStock, "Debe ingresar Stock");
                    txtStock.Focus();
                }
            }
            return false;
        }

        //CARGA LVWPRODUCTOSEL (Para seleccion en SP)
        public void cargarLvwProductoSel()
        {
            lvwProductoSel.Items.Clear();
            ListViewItem x;
            //try
            //{
            ArrayList colProducto = interfaceProducto.obtenerColeccionProducto();
            foreach (Producto objProducto in colProducto)
            {
                x = lvwProductoSel.Items.Add(objProducto.Codigo);
                x.SubItems.Add(objProducto.Nombre);
                x.SubItems.Add(objProducto.Descripcion);
                x.Tag = objProducto;
            }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

        //CARGA LVW FABRICANTE
        public void cargarLvwFabricante()
        {
            lvwFabricante.Items.Clear();
            ListViewItem x;
            //try
            //{
            ArrayList colFabricante = interfaceFabricante.obtenerColeccionFabricante();
            foreach (Fabricante objFabricante in colFabricante)
            {
                x = lvwFabricante.Items.Add(objFabricante.Nombre);
                x.Tag = objFabricante;
            }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

        //CARGA LISTVIEW PROD-SUBPROD
        public void cargarLvwProducto(ArrayList col, String xTipo)
        {
            //try
            //{
            lvwProducto.Items.Clear();
            lvwProducto.Columns.Clear();
            ListViewItem x;
            if (xTipo.Equals("P") && col.Count > 0)//PRODUCTO
            {
                lvwProducto.Columns.Add("Codigo", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Nombre", 160, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Descripcion", 240, HorizontalAlignment.Left);
                lvwProducto.ForeColor = SystemColors.ActiveCaptionText;
                foreach (Producto objProducto in col)
                {
                    x = lvwProducto.Items.Add(objProducto.Codigo);
                    x.SubItems.Add(objProducto.Nombre);
                    x.SubItems.Add(objProducto.Descripcion);
                    x.Tag = objProducto;
                }
            }
            else if (xTipo.Equals("S") && col.Count > 0)//SUBPRODUCTO
            {
                lvwProducto.Columns.Add("Producto", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Codigo", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Codigo Interno", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Codigo Proveedor", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Nombre", 80, HorizontalAlignment.Left);
                lvwProducto.ForeColor = SystemColors.ActiveCaptionText;
                foreach (SubProducto objSubProducto in col)
                {
                    x = lvwProducto.Items.Add(objSubProducto.ObjProducto.Codigo + " - " + objSubProducto.ObjProducto.Nombre);
                    x.SubItems.Add(objSubProducto.Codigo);
                    x.SubItems.Add(objSubProducto.CodigoInterno);
                    x.SubItems.Add(objSubProducto.CodigoProveedor);
                    x.SubItems.Add(objSubProducto.Nombre);
                    x.Tag = objSubProducto;
                }
            }
            else if (xTipo.Equals("St") && col.Count > 0)//STOCK
            {
                lvwProducto.Columns.Add("Producto", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Codigo", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Codigo Interno", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Codigo Proveedor", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Nombre", 80, HorizontalAlignment.Left);
                lvwProducto.Columns.Add("Stock", 80, HorizontalAlignment.Left);
                lvwProducto.ForeColor = SystemColors.ActiveCaptionText;
                foreach (SubProducto objSubProducto in col)
                {
                    SpStock objSpStock = interfaceSpStock.obtenerSpStock(objSubProducto.IdSubProducto);
                    x = lvwProducto.Items.Add(objSubProducto.ObjProducto.Codigo + " - " + objSubProducto.ObjProducto.Nombre);
                    x.SubItems.Add(objSubProducto.Codigo);
                    x.SubItems.Add(objSubProducto.CodigoInterno);
                    x.SubItems.Add(objSubProducto.CodigoProveedor);
                    x.SubItems.Add(objSubProducto.Nombre);
                    x.SubItems.Add(Convert.ToString(objSpStock.Stock));
                    x.Tag = objSubProducto;
                }
            }
            if (col.Count == 0)
            {
                lvwProducto.Columns.Add("Resultado de Busqueda", 200, HorizontalAlignment.Left);
                lvwProducto.ForeColor = SystemColors.GrayText;
                lvwProducto.Items.Add("No se encontraron resultados");
            }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("#Presentacion# " + ex.Message);
            //}
        }

        //LIMPIA LISTVIEW PROD-SUBPROD
        public void limpiarLvwProducto()
        {
            lvwProducto.Columns.Clear();
            lvwProducto.Items.Clear();
        }

        //CAMBIO BOTONES ALTA, MODIF, BAJA
        private void cambioBotones(char xChar)
        {
            if (xChar.Equals('A'))
            {
                btnGrabar.Visible = true;
                btnBorrar.Visible = true;
                btnModificar.Visible = false;
            }
            else if (xChar.Equals('M'))
            {
                btnGrabar.Visible = false;
                btnBorrar.Visible = true;
                btnModificar.Visible = true;
            }
            else if (xChar.Equals('X'))
            {
                btnGrabar.Visible = false;
                btnBorrar.Visible = false;
                btnModificar.Visible = true;
            }
        }

        

#endregion

/* ################################################################################################################################ */

#region Controles

        //LABEL PRODUCTO LIMPIA
        private void labelProductos_Click(object sender, EventArgs e)
        {
            FuncionesGenericas.limpiarTextForm(this);
            FuncionesGenericas.limpiarComboForm(this);
            FuncionesGenericas.limpiarDtpForm(this);
            FuncionesGenericas.limpiarListviewForm(this);
            if (tabControlProductos.SelectedIndex == 0 || tabControlProductos.SelectedIndex == 1) { this.cambioBotones('A'); }
            else if (tabControlProductos.SelectedIndex == 2) { this.cambioBotones('X'); }
            txtSubProdUnidad.Text = "1";
            txtStockMin.Text = "";
            txtStock.Text = "";
        }

        //CAMBIO PESTAÑAS EN TABCONTROL
        private void tabControlProductos_SelectedIndexChanged(Object sender, EventArgs e)
        {
            errorProvider1.Clear();
            if (tabControlProductos.SelectedIndex == 0)//PROD
            {
                labelProductos.Text = "Productos";
                this.cambioBotones('A');
                FuncionesGenericas.limpiarTextForm(this);
                FuncionesGenericas.limpiarComboForm(this);
                FuncionesGenericas.limpiarDtpForm(this);
                FuncionesGenericas.limpiarListviewForm(this);
            }
            else if (tabControlProductos.SelectedIndex == 1)//SUBPROD
            {
                labelProductos.Text = "SubProductos";
                this.cambioBotones('A');
                FuncionesGenericas.limpiarTextForm(this);
                FuncionesGenericas.limpiarComboForm(this);
                FuncionesGenericas.limpiarDtpForm(this);
                FuncionesGenericas.limpiarListviewForm(this);
                this.cargarLvwProductoSel();
                this.cargarLvwFabricante();
                txtSubProdUnidad.Text = "1";
                txtStockMin.Text = "1";
            }
            else if (tabControlProductos.SelectedIndex == 2)//STOCK
            {
                labelProductos.Text = "Stock";
                this.cambioBotones('X');
                FuncionesGenericas.limpiarTextForm(this);
                FuncionesGenericas.limpiarListviewForm(this);
            }
        }

        //SELECCION LISTVIEW PRODUCTO
        private void lvwProducto_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvwProducto.SelectedItems.Count > 0)
            {
                foreach (ListViewItem x in lvwProducto.SelectedItems)
                {
                    if (tabControlProductos.SelectedIndex == 0 && x.Tag != null)//PROD
                    {
                        Producto objProducto = (Producto)x.Tag;
                        txtId.Text = Convert.ToString(objProducto.IdProducto);
                        txtProdCodigo.Text = objProducto.Codigo;
                        txtProdNombre.Text = objProducto.Nombre;
                        txtProdDescripcion.Text = objProducto.Descripcion;
                        this.cambioBotones('M');
                    }
                    else if (tabControlProductos.SelectedIndex == 1 && x.Tag != null)//SUBPROD
                    {
                        SubProducto objSubProducto = (SubProducto)x.Tag;
                        txtId.Text = Convert.ToString(objSubProducto.IdSubProducto);
                        txtSubProdCodigo.Text = objSubProducto.Codigo;
                        txtSubProdCodigoInt.Text = objSubProducto.CodigoInterno;
                        txtSubProdCodigoProv.Text = objSubProducto.CodigoProveedor;
                        txtSubProdUnidad.Text = Convert.ToString(objSubProducto.Unidad);
                        txtSubProdNombre.Text = objSubProducto.Nombre;
                        txtSubProdDescripcion.Text = objSubProducto.Descripcion;
                        int i = 0;
                        foreach(ListViewItem xSp in lvwProductoSel.Items)
                        {
                            Producto objTag = (Producto)xSp.Tag;
                            if (objTag.IdProducto == objSubProducto.ObjProducto.IdProducto)
                            {
                                this.lvwProductoSel.Items[i].Selected = true;
                            }
                            i++;
                        }
                        i = 0;
                        foreach (ListViewItem xFab in lvwFabricante.Items)
                        {
                            Fabricante objTag = (Fabricante)xFab.Tag;
                            if (objTag.IdFabricante == objSubProducto.ObjFabricante.IdFabricante)
                            {
                                this.lvwFabricante.Items[i].Selected = true;
                            }
                            i++;
                        }
                        this.cambioBotones('M');
                    }
                    else if (tabControlProductos.SelectedIndex == 2 && x.Tag != null)
                    {
                        SubProducto objSubProducto = (SubProducto)x.Tag;
                        
                        txtId.Text = Convert.ToString(objSubProducto.IdSubProducto);
                        txtStockCodigo.Text = objSubProducto.Codigo;
                        txtStockCodigoInt.Text = objSubProducto.CodigoInterno;
                        txtStockCodigoProv.Text = objSubProducto.CodigoProveedor;
                        txtStockNombre.Text = objSubProducto.Nombre;
                        txtStockDescripcion.Text = objSubProducto.Descripcion;
                        if (interfaceSpStock.existeSpStock(objSubProducto.IdSubProducto))
                        {
                            SpStock objSpStock = interfaceSpStock.obtenerSpStock(objSubProducto.IdSubProducto);
                            txtStockMin.Text = Convert.ToString(objSpStock.StockMin);
                            txtStock.Text = Convert.ToString(objSpStock.Stock);
                        }
                    }
                }
            }
            else
            {
                FuncionesGenericas.limpiarTextForm(this);
                FuncionesGenericas.limpiarComboForm(this);
                FuncionesGenericas.limpiarDtpForm(this);
                if (tabControlProductos.SelectedIndex == 0 || tabControlProductos.SelectedIndex == 1) this.cambioBotones('A');
                else if (tabControlProductos.SelectedIndex == 2) this.cambioBotones('X');   
                //FuncionesGenericas.deseleccionarListViewForm(this);
            }
        }

#endregion





    }
}
